/**
 * @Description: ourslook.js 千穆软件自己创建的，一般所有的自定义的model 数据都放到这个一个里面把，避免和系统的冲突
 * @author dazer
 * @date 2019/2/13 上午11:48
 */
import { getSysConfigByCodeApi as queryLogo } from '@/services/api';

export default {
  namespace: 'ourslook',

  state: {
    logoOnline: null,
  },

  /**
   * effects： dva中主要是异步的处理数据，如：异步请求
   * 接收到 dispatch 命令就会执行
   * dispatch({
   *    type: 'user/fetchCurrent',
   *    payload: {
          totalCount: data.length,
          unreadCount,
        },
   *  });
   */
  effects: {
    /**
     * https://github.com/dvajs/dva/issues/1471
     * https://github.com/dvajs/dva-knowledgemap#select
     * https://github.com/dvajs/dva-knowledgemap#call
     * https://github.com/dvajs/dva-knowledgemap#put
     * @param _ 一般是payload的数据
     * @param call 一般调用异步网络请求, eg:  const response = yield call(queryUsers);
     * @param put 把数据转给reducers进行包装处理
     * @param select 用于从 state 里获取数据
     * select 回调里的 state 是 redux 的state 对象，如果你想获取当前model 的需要 state.currentModelName
     *
     * @description sysconfig.js 更新logo的时候， 通知 BasicLayout进行切换logo
     */
    *fetchLogoConfigFromUpdate({ payload }, { call, put, select }) {
      /**
       * put： 可以交给本js里面的 reducers处理，也可以交给其他 model.js处理
       * 如搜索：user/changeNotifyCount
       */
      const logo = payload.logoOnline;
      yield put({
        type: 'saveSysConfig',
        payload: logo,
      });
    },
    /**
     * 从服务器获取logo的数据
     */
    *fetchLogoConfigFromInternet(_, { call, put, select }) {
      const payload = 'CONFIG_SYS_LOGO';
      const response = yield call(queryLogo, payload);
      const logo = response.entity[0].value;
      yield put({
        type: 'saveSysConfig',
        payload: logo,
      });
    },
  },

  /**
   * reducers： dva中主要是同步的包装数据，接收到本类火灾其他类的 put 命令，匹配上会执行
   * yield put({
   *     type: 'save',
   *     payload: response,
   *   });
   */
  reducers: {
    /**
     * @param state 应该是全局属性state的含义
     * @param action , 更倾向写成 eg: `{ payload }`形式，表示解构出来的数据，同：`action.payload`
     */
    saveSysConfig(state, action) {
      return {
        ...state,
        logoOnline: action.payload,
      };
    },
  },
};
